#! /usr/bin/python2.7
# coding=utf-8

# 执行命令 source activate进入虚拟环境

# 退出虚拟环境执行命令deactivate

# # bool类型 首字母大写
# a = True
# b = False
#
# print a
# print b
# print type(a)
#
# # 输入输出
#
# mystr = raw_input('> ')
# print mystr
# print type(mystr)
# print 2 * int(mystr)
# print 100 + int(mystr)
# #
# # int()也是内建函数
# # python 不会隐式的将数字转换为字符串
#
# # 静态类型 运行时不允许类型转化
# # 动态类型 运行时可以进行类型转换
# # 强类型 不允许类型隐式转换
# # 弱类型
#
# # C语言   弱类型            静态类型
# # C++     强类型（有争议）  静态类型
# # java    强类型            静态类型
# # python  强类型            动态类型
# # shell   弱类型            动态类型
#
#
# # 操作符
# # 大部分运算符同C语言
# # python 中的除法有三种风格
# #    1.传统除法
#
# a = 1
# b = 2.0
# c = 2
# print a/b
# print a/c
#
# #   2.地板（floor）除法 向下取整
# a = 1
# b = 2
# c = -1
# print a//b
# print c//b
# # 负数向下取整（和C语言不同）

# #   3.精确除法
# from __future__ import division
# a = 1
# b = 2
# print a/b
#
# # 乘方
# a = 100
# b = 23
# result = a ** b
# print result
# # python 中也支持逻辑运算符 and or not
# # 也支持短路求值
#
# print 2 < 3 < 4
# # 2 < 3 and 3 < 4
# # 如果是在C语言中 2 < 3 值为1   1 < 4
#
# # ******************元组 列表  字典*******************
#
# # 认识列表
# # 类似于C语言的数组
# a = [1, 2, 3, 4]
# print a
# # 可以不同的类型元素都存放在里面
#
# a = [1, 'hehe', 3, 4, 5]
# print a
#
# print a[0]
# print a[1]
# print a[2]
# print a[3]
#
# print a[-2]
# print a[1: 4]
# a[0] = 'nihao'
# # 像修改数组一样
# print type(a)
#
# # 认识元组（tuple）
# # 和列表的区别就是不可以修改
# a = (1, 2, 3, 4)
# print a
# print a[0]
# print a[1]
# print a[2]
# print a[-2]
#
# # a[2] = 3
#
# # 认识字典（哈希表）
# a = {'ip': '127.0.0.1', 'port': 8080}
# print a
# print a['ip']
# print a['port']
#
# # 理解引用
# # python 中定义变量并没有开辟空间 i
# # 而是将变量名这个标签贴在对应的内存上
# # 当这个我们显示修改这个变量的值，其实就是将这个标签又重新贴在另一块内存上
# a = 100
# print id(a), id(100)
# # id()内建函数,并不是虚拟地址，也不是物理地址
# # id()只是表示对象唯一性的标号
# a = 200
# print id(a), id(200)
# b = a
# print id(a), id(b), id(200)
#
# # *********************代码块及缩进****************
#
# # 在其他的编程语言中用{}来表示代码块
# # python中用缩进来表示代码块 相当于从语法角度规定了代码风格
#
# # if语句
# a = 1
# if a < 1:
#     print 'a < 1'
# elif a == 1:
#     print 'a = 1'
# else:
#     print 'a > 1'
# # python 中没有 switch 语句
#
# # 循环语句
#
# count = 0
# while count < 3:
#     print count
#     count += 1
#
# # 认识for 循环
# # C 语言中的for(;;;)
# # python 中 for_each
#
#
# mystr = 'abcd'
# for c in mystr:
#     print c
# # C++中的range based for
# # vector<int> vec
# # for(int item : vec)
# #   print item
#
# for item in [1, 2, 3, 4]:
#     print item
#
# a = {'ip': '127.0.0.1', 'port': 8080}
# for key in a:
#     print key, a[key]
#
# for i in range(1, 102, 2):
#     print i
# # [1,102) 步长为 2
# # 上面代码就可以将 1 到 102 之间的奇数打印出来
#
#
# # break语句
# # 打印 1 到 100 之间第一个为 3 的倍数的数字
# for i in range(1, 101):
#     if i % 3 == 0:
#         break
# print i
# # 看到上面代码 中 i 是出for循环作用域 还能使用
#
# # continue语句
# # 打印 1 到 100 之间 所有 3 的倍数
# for i in range(1, 101):
#     if i % 3 != 0:
#         continue
#     print i
#
# # pass 语句
# # 有时候用到了 空语句 什么都不做 由于没有{} 需要用一个专门的语句来占位
#
# #  列表解析 获取 1 到 100 序列 的平方序列
# #  即 1 4 9 16 25 ......
# print [x ** 2 for x in range(1, 101)]
# # 获取 1 到 100 序列中 为 3 的倍数的平方
# print [x ** 2 for x in range(1, 101) if x % 3 == 0]
#
# # 函数
# # 函数定义
# def Add(x, y):
#     z = x + y
#     return z
# # 函数的使用
# ret = Add(10, 20)
# print ret
#
# ret = Add('hello ', 'world')
# print ret
# # 运行时报错 两个类型可以相加
#
# # C++ 中函数重载
# # 函数签名不同 参数类型 CV限定符
# # 没有函数重载
#
# # 后面的会覆盖前面的
# # 类似于变量重新赋值
# # 类型为function类型
# # def Add(x, y, z):
# #     return x + y + z
# # ret = Add(1, 2)
# # print ret
#
#
# # python 支持默认参数
# def Add(x, y, z=0):
#     return x + y + z
#
# ret = Add(19, 29)
# print ret
# ret = Add(19, 29, 20)
# print ret
#
# # 支持多个返回值
# def Get():
#     x = 10
#     y = 20
#     return x, y
# a, b = Get()
# print a
# print b

# unpack
# 一个函数的返回值可以是一个元组
# def GetPoint():
#     return 100, 200
# x, y = GetPoint()
# print x, y
#
# _, z =GetPoint()
#
# print z
#
# print type(GetPoint())



# # 可调用对象
#
# func = Add
# print func(10, 20)
#
# # 函数的属性
# print dir(Add)
#
# # 文件操作
#
# # 打开文件
# # rb  rt
# # 返回的是文件对象
# f = open('./1test.py', 'w')
# f.write('aaa  ')
# f.write('bbb  ')
# f.write('ffff  ')
# # 关闭文件对象
# f.close()
# # print 带上 ，就不会换行
# # 统计词频
# # 文件多行 每行一个单词
# data = {}
# f = open('./1test.py', 'r')
#
# for line in f:
#     if line in data:
#         data[line] += 1
#     else:
#         data[line] = 1
# f.close()


# 一个完整的例子，一个文本文件中，每一行是一个单词，可能有重复，统计每个单词出现的次数

# handle = open('./test.txt', 'w')
# handle.write('aaaa\n')
# handle.write('bbbb\n')
# handle.write('cccc\n')
# handle.close()
#
#
# handle = open('./test.txt', 'r')
# words = {}      # 定义一个字典
# for word in handle :
#     word = word[:-1]      # 去掉末尾的'\n'
#     if word not in words:
#         words[word] = 1
#     else:
#         words[word] +=1
# handle.close()
#
# print words


# *****************模块的概念******************
# 当一个项目中发代码量较大时，就需要将代码放入到多个不同的.py文件中
# 通过import 关键字，引入其他.py文件中的代码
# 被引入的这个代码文件，就称为"模块"

# 只是import add模块中的Add 这一个名字
# from add import Add
# print Add(1, 2)


# 直接import 模块名
# import add
# print add.Add(1,3)


# import 模块名，并且给模块取一个别名
# import add
# a = add
# print a.Add(1,4)

# 模块查找的顺序是，先查找当前目录，再查找Python的安装目录

import sys
print sys.path
print help(sys)















































